#include <stdio.h>


// int main()
// {
//     int a = 0x11223344;
//     int* pi = &a;
//     char* pc = (char*)&a;
//     printf("pa=%p\n",pi);
//     printf("pa+1=%p\n",pi+1);
//     printf("pc=%p\n",pc);
//     printf("pc+1=%p\n",pc+1);
//     //指针要初始化以避免野指针
//     int* p1 = NULL;
//     return 0;
// }



// 指针-指针的应用
#include <string.h>

// //之前讲过的方法
// int my_strlen(char* str)
// {
//     int count = 0;
//     while(*str != '\0')
//     {
//         count ++;
//         str ++;
//     }
//     return count;
// }

// //采用指针-指针的方法
// int my_strlen(char* str)
// {
//     char* start = str;
//     while(*str != '\0')
//     {
//         str++;
//     }
//     return (str - start);
// }
// int main()
// {
//     int len =strlen("abcdef");
//     int mylen = my_strlen("abcdef");
//     printf("%d\n",len);
//     printf("%d\n",mylen);
//     return 0;
// }
 
// //二级指针
// int main()
// {
//     int a = 10;
//     int* pa = &a;
//     int** ppa = &pa;
//     **ppa = 20;
//     printf("%p----%p----%d\n",pa,ppa,a);
//     return 0;
// }

// //指针数组
// int main()
// {
//     int a = 10;
//     int b = 20;
//     int c = 30;
//     int* parr[10] = {&a,&b,&c};
//     int i = 0;
//     for(int i =0;i < 3;i++)
//     {
//         printf("%d ",*(parr[i]));
//     }
// }

//指针数组模拟二维数组
int main()
{
    int arr[3][4] = {1,2,3,4,2,3,4,5,3,4,5,6};
    int i = 0;
    int j = 0;
    for(i = 0;i < 3; i++)
    {
        for(j = 0; j < 4; j++)
        {
            printf("%d ",arr[i][j]);
        }
        printf("\n");
    }
    //指针数组模拟
    int arr1[4] = {1,2,3,4};
    int arr2[4] = {2,3,4,5};
    int arr3[4] = {3,4,5,6};
    int* parr[3] = {arr1,arr2,arr3};
    for(i = 0;i < 3; i++)
    {
        int j = 0;
        for(j = 0;j < 4;j++)
        {
            printf("%d ",parr[i][j]);//再次印证arr[i] <==> *(arr + i)
        }
        printf("\n");
    }
    return 0;
}